package model

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"gorm.io/gorm/schema"
	"next-vue-backend/utils"
	"os"
	"time"
)

var (
	db *gorm.DB
	err error
)

// InitDb 初始化数据库
func InitDb () {
	dns := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local",
		utils.DbUser,
		utils.DbPassword,
		utils.DbHost,
		utils.DbPort,
		utils.DbName,
	)

	db, err = gorm.Open(mysql.Open(dns), &gorm.Config{
		// gorm日志模式: silent
		Logger: logger.Default.LogMode(logger.Silent),
		// 外键约束
		DisableForeignKeyConstraintWhenMigrating: true,
		// 禁用默认事务（提高运行速度）
		SkipDefaultTransaction: true,
		NamingStrategy: schema.NamingStrategy{
			// 使用单数表名，启用该选项，表名"User"应该是 "user" (禁用默认表名的复数形式)
			SingularTable: true,
		},

	})

	if err != nil {
		fmt.Printf("连接数据库失败，请检查参数", err)
		os.Exit(1)
	}
	var models = []interface{}{
		&User{},
		&Category{},
		&Article{},
		&Verse{},
		&Comment{},
		&Idea{},
	}
	// 迁移数据表
	err := db.AutoMigrate(models...)
	if err != nil {
		fmt.Println(err)
	}

	sqlDB, _ := db.DB()

	// 设置连接池中的最大闲置连接数
	sqlDB.SetMaxIdleConns(10)
	// 设置数据库的最大连接数量
	sqlDB.SetMaxOpenConns(100)
	//  设置连接的最大可复用时间
	sqlDB.SetConnMaxLifetime(10 * time.Second)
	//db.Close()
}
